<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <div class="a">111</div>
    <div class="a">111</div>

    <script>

        // jq 本质上就是一个构造函数  

        // 链式操作  return this


        function GetEle(ele) {
            // 获取所有的元素
            this.eles = document.querySelectorAll(ele);
        }


        // $符号就是实例化对象   省略每一次的new
        function $(ele) {
            return new GetEle(ele)
        }



        GetEle.prototype.hide = function () {
            // 隐藏了所有匹配的元素
            this.eles.forEach(v => {
                v.style.display = 'none';
            })
            return this
        }


        GetEle.prototype.show = function () {
            // 隐藏了所有匹配的元素
            this.eles.forEach(v => {
                v.style.display = 'block';
            })
            return this
        }


        // 获取内容 、 设置内容
        // $('.a').text()   默认获取第一个
        // $('p').text('hello world')
        GetEle.prototype.text = function () {
            // 判断有没有参数
            if (arguments.length >= 1) {
                this.eles.forEach(v => {
                    v.innerText = arguments[0];
                })
            } else {
                // 没有参数表示是在获取   默认返回第一个
                return this.eles[0].innerText
            }
            return this
        }

        GetEle.prototype.html = function () {
            // 判断有没有参数
            if (arguments.length >= 1) {
                this.eles.forEach(v => {
                    v.innerHTML = arguments[0];
                })
            } else {
                // 没有参数表示是在获取   默认返回第一个
                return this.eles[0].innerHTML
            }
            return this
        }


        // addClass 添加一个或者多个类名
        GetEle.prototype.addClass = function (a) {
            this.eles.forEach(v => {
                v.className += ' ' + a;
            })
            return this;
        }


        GetEle.prototype.css = function () {
            // 判断参数
            if (arguments.length === 1) {
                // 判断是不是对象

                // 参数是字符串  --- 获取这个样式
                if (typeof arguments[0] === 'string') {
                    // 返回这个属性值
                    // getComputedStyle(div).color 
                    return getComputedStyle(this.eles[0])[arguments[0]]
                } else {
                    // 参数是一个对象  --- 设置多个样式
                    this.eles.forEach(v => {
                        // 遍历对象
                        // for (let key in arguments[0]) {
                        //     v.style[key] = arguments[0][key];
                        // }
                        const obj = arguments[0];
                        for (let key in obj) {
                            v.style[key] = obj[key];
                        }
                    })
                }

                // 参数有两个  设置一个样式
            } else {
                this.eles.forEach(v => {
                    v.style[arguments[0]] = arguments[1]
                })
            }
            return this
        }



        GetEle.prototype.parent = function () {
            this.eles = [this.eles[0].parentElement];
            return this
        }




        const res = $('.a').addClass('b').html('000').hide().parent().addClass('c').html();
        console.log(res)

    </script>

</body>

</html>